#include "http.hpp"

static bool ReadFile(const std::string &filename, std::string *buf) 
{
    std::ifstream ifs(filename, std::ios::binary);
    if (ifs.is_open() == false) {
        printf("OPEN %s FILE FAILED!!", filename.c_str());
        return false;
    }
    size_t fsize = 0;
    ifs.seekg(0, ifs.end);//跳转读写位置到末尾
    fsize = ifs.tellg();  //获取当前读写位置相对于起始位置的偏移量，从末尾偏移刚好就是文件大小
    ifs.seekg(0, ifs.beg);//跳转到起始位置

    buf->resize(fsize); //开辟文件大小的空间
    
    ifs.read(&(*buf)[0], fsize);
    if (ifs.good() == false) 
    {
        printf("READ %s FILE FAILED!!", filename.c_str());
        ifs.close();
        return false;
    }
    
    ifs.close();
    return true;
}

static bool WriteFile(const std::string& filename,const std::string& data)
{
    //binary：以二进制模式打开文件trunc：将文件原有内容丢弃
    std::ofstream ofs(filename, std::ofstream::binary | std::ofstream::trunc);
    if(ofs.is_open() == false)
    {
        printf("OPEN %s FILE FAILED!!", filename.c_str());
        return false;
    }

    ofs.write(data.c_str(),data.size());
    if(ofs.good() == false)
    {
        ERROR_LOG("WRITE %s FILE FAILED!", filename.c_str());
        ofs.close();    
        return false;
    }
    ofs.close();
    return true;
}

int main()
{
    std::string buff;
    bool ret = ReadFile("../muduo_source/main.cpp",&buff);
    if(ret == false)
    {
        return false;
    }
    std::cout << buff.c_str() <<std::endl;

    ret = WriteFile("./test_write_file.c",buff.c_str());
    if(ret == false)
    {
        return false;
    }
    return 0;
}

// size_t Split(std::string& src,const std::string& sep,std::vector<std::string>* array)
// {
//     size_t offset = 0; // 切割的位置
//     //abc,def,,,ghi,
//     while(offset < src.size())
//     {
//         size_t pos = src.find(sep,offset); //从offset位置开始找sep分割字符/串
//         if(pos == std::string::npos) //找不到分割字符串，但是得先把最后一个位置的字符串放入array
//         {
//             //if(pos == src.size())   break;
//             array->push_back(src.substr(offset));
//             return array->size();
//         }
//         //找到了，分割字符串添加进array，然后offset往后走
//         if(offset == pos) //如果找到的是一个空字符串,直接跳过不用添加进array
//         {
//             offset = pos + sep.size();
//             continue;
//         }
//         array->push_back(src.substr(offset,pos - offset));
//         offset = pos + sep.size();
//     }
//     return array->size();
// }

// int main()
// {
//     std::string str = "";
//     std::vector<std::string> arr;
//     Split(str, "," ,&arr);

//     for(auto &str : arr)
//     {
//         std::cout << "[" << str << "]" << std::endl;
//     }
    
//     return 0;
// }